﻿using System;

namespace XCode.DataAccessLayer
{
    /// <summary>
    /// 数据索引。
    /// 可根据索引生成查询方法，是否唯一决定该索引返回的是单个实体还是实体集合。
    /// 正向工程将会为所有一对一索引建立关系。
    /// </summary>
    public interface IDataIndex
    {
        #region 属性
        /// <summary>名称</summary>
        String Name { get; set; }

        /// <summary>数据列集合</summary>
        String[] Columns { get; set; }

        /// <summary>是否唯一</summary>
        Boolean Unique { get; set; }

        /// <summary>是否主键</summary>
        Boolean PrimaryKey { get; set; }

        ///// <summary>是否计算出来的，而不是数据库内置的。主要供反向工程识别该索引是否由计算产生，反向工程会要求数据库拥有真正的索引。</summary>
        //Boolean Computed { get; set; }
        #endregion

        #region 扩展属性
        /// <summary>说明数据表</summary>
        IDataTable Table { get; }
        #endregion

        #region 方法
        /// <summary>修正数据</summary>
        /// <returns></returns>
        IDataIndex Fix();

        /// <summary>克隆到指定的数据表</summary>
        /// <param name="table"></param>
        IDataIndex Clone(IDataTable table);
        #endregion
    }
}